// pages/student/kaoshi/detail.js
Page({
  data: {
    exam: null,
    isLoading: true,
    showShareModal: false,
    shareImagePath: ''
  },

  onLoad: function(options) {
    const examId = options.id;
    this.loadExamDetail(examId);
  },

  // 加载考试详情
  loadExamDetail: function(examId) {
    this.setData({ isLoading: true });
    
    wx.request({
      url: `http://localhost:3000/api/exams/${examId}`,
      method: 'GET',
      header: {
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
      },
      timeout: 10000, // 增加超时时间到10秒
      success: (res) => {
        if (res.statusCode === 200) {
          this.setData({
            exam: res.data,
            isLoading: false
          });
        } else {
          console.error('获取考试详情失败:', res.data);
          this.setData({ isLoading: false });
          wx.showToast({
            title: res.data.message || '获取考试详情失败',
            icon: 'none'
          });
          
          // 如果获取失败，使用模拟数据
          this.setMockData(examId);
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
        this.setData({ isLoading: false });
        wx.showToast({
          title: '网络连接超时，已加载模拟数据',
          icon: 'none',
          duration: 2000
        });
        
        // 如果请求失败，使用模拟数据
        this.setMockData(examId);
      }
    });
  },
  
  // 设置模拟数据
  setMockData: function(examId) {
    const mockExamDetail = {
      id: examId,
      courseName: '高等数学',
      courseCode: 'MATH101',
      examDate: '2023-12-25',
      examTime: '09:00-11:00',
      location: '教学楼A栋301',
      seatNumber: 'A12',
      teacher: '张教授',
      status: 'upcoming',
      notes: '请携带计算器和学生证，禁止携带手机等电子设备。考试为闭卷，可使用普通计算器。'
    };
    
    this.setData({
      exam: mockExamDetail,
      isLoading: false
    });
  },

  // 添加到日历提醒
  addToCalendar: function() {
    wx.showModal({
      title: '添加提醒',
      content: `是否将"${this.data.exam.courseName}"考试添加到系统日历？`,
      success: (res) => {
        if (res.confirm) {
          wx.showToast({
            title: '已添加到日历',
            icon: 'success'
          });
        }
      }
    });
  },

  // 生成分享图
  generateShareImage: function() {
    wx.showLoading({
      title: '生成分享图中...',
    });
    
    const exam = this.data.exam;
    const ctx = wx.createCanvasContext('shareCanvas');
    
    // 调整画布尺寸和比例
    const canvasWidth = 1920; 
    const canvasHeight = 1920; 
    
    // 绘制白色背景
    ctx.setFillStyle('#ffffff');
    ctx.fillRect(0, 0, canvasWidth, canvasHeight);
    
    // 绘制顶部标题
    ctx.setFillStyle('#333333');
    ctx.setFontSize(32);
    ctx.setTextAlign('center');
    ctx.fillText('考试信息分享图', canvasWidth/2, 50);
    
    // 绘制蓝色标题背景
    ctx.setFillStyle('#3a86ff');
    ctx.fillRect(40, 80, 520, 120);
    
    // 绘制课程名称
    ctx.setFillStyle('#ffffff');
    ctx.setFontSize(40);
    ctx.setTextAlign('center');
    ctx.fillText(exam.courseName, canvasWidth/2, 130);
    
    // 绘制课程代码
    ctx.setFontSize(28);
    ctx.setFillStyle('rgba(255, 255, 255, 0.9)');
    ctx.fillText(`课程代码: ${exam.courseCode}`, canvasWidth/2, 180);
    
    // 绘制考试信息卡片
    ctx.setFillStyle('#f8f8f8');
    ctx.fillRect(40, 230, 520, 380);
    
    // 绘制考试信息标题
    ctx.setFillStyle('#333333');
    ctx.setFontSize(32);
    ctx.setTextAlign('left');
    ctx.fillText('考试信息', 70, 270);
    
    // 绘制分割线
    ctx.setStrokeStyle('#dddddd');
    ctx.beginPath();
    ctx.moveTo(70, 290);
    ctx.lineTo(530, 290);
    ctx.stroke();
    
    // 设置信息文本样式
    ctx.setFontSize(28);
    const labelX = 70;
    const valueX = 220;
    let currentY = 340;
    const lineHeight = 60;
    
    // 绘制考试日期
    ctx.setFillStyle('#666666');
    ctx.fillText('考试日期:', labelX, currentY);
    ctx.setFillStyle('#333333');
    ctx.fillText(exam.examDate, valueX, currentY);
    currentY += lineHeight;
    
    // 绘制考试时间
    ctx.setFillStyle('#666666');
    ctx.fillText('考试时间:', labelX, currentY);
    ctx.setFillStyle('#333333');
    ctx.fillText(exam.examTime, valueX, currentY);
    currentY += lineHeight;
    
    // 绘制考试地点
    ctx.setFillStyle('#666666');
    ctx.fillText('考试地点:', labelX, currentY);
    ctx.setFillStyle('#333333');
    ctx.fillText(exam.location, valueX, currentY);
    currentY += lineHeight;
    
    // 绘制座位号
    ctx.setFillStyle('#666666');
    ctx.fillText('座位号:', labelX, currentY);
    ctx.setFillStyle('#333333');
    ctx.fillText(exam.seatNumber, valueX, currentY);
    currentY += lineHeight;
    
    // 绘制任课教师
    ctx.setFillStyle('#666666');
    ctx.fillText('任课教师:', labelX, currentY);
    ctx.setFillStyle('#333333');
    ctx.fillText(exam.teacher, valueX, currentY);
    
    // 绘制底部提示
    ctx.setFillStyle('#999999');
    ctx.setFontSize(24);
    ctx.setTextAlign('center');
    ctx.fillText('智慧校园 - 考试安排', canvasWidth/2, 680);
    ctx.setFontSize(22);
    ctx.fillText('长按保存图片', canvasWidth/2, 720);
    
    // 绘制完成后输出图片
    ctx.draw(false, () => {
      setTimeout(() => {
        wx.canvasToTempFilePath({
          canvasId: 'shareCanvas',
          x: 0,
          y: 0,
          width: canvasWidth,
          height: canvasHeight,
          destWidth: canvasWidth * 4, // 提高输出图片质量
          destHeight: canvasHeight * 4,
          success: (res) => {
            this.setData({
              shareImagePath: res.tempFilePath,
              showShareModal: true
            });
            wx.hideLoading();
          },
          fail: (err) => {
            console.error('生成分享图失败:', err);
            wx.hideLoading();
            wx.showToast({
              title: '生成分享图失败',
              icon: 'none'
            });
          }
        });
      }, 1000); // 延长等待时间确保绘制完成
    });
  },
  
  // 隐藏分享弹窗
  hideShareModal: function() {
    this.setData({
      showShareModal: false
    });
  },
  
  // 保存分享图到相册
  saveShareImage: function() {
    wx.saveImageToPhotosAlbum({
      filePath: this.data.shareImagePath,
      success: () => {
        wx.showToast({
          title: '已保存到相册',
          icon: 'success'
        });
        this.hideShareModal();
      },
      fail: (err) => {
        if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
          wx.showModal({
            title: '提示',
            content: '需要您授权保存图片到相册',
            showCancel: false,
            success: () => {
              wx.openSetting();
            }
          });
        } else {
          wx.showToast({
            title: '保存失败',
            icon: 'none'
          });
        }
      }
    });
  }
});